# -*- coding: utf-8 -*-
# @Time    : 2021/4/15 16:37
# @Author  : mokez
# @Email   : mokez@qq.com
# @File    : 密码验证.py
# @Software: PyCharm
# 用户密码复杂度验证 (封装成函数)
# • 长度超过8位（必须） +1分
# • 包括大、小写字母.数字.其它符号,以上四种至少三种 +1分
# • 不能有长度超过或等于3的子串重复 +1分
# • 密码的评分等级，默认2分，以上条件满足一条加1分
# • 返回密码的评分等级，及要改进的点：
# • 如 return 3, ['长度小于8','密码没有由3种以上字符组成']

import string

lst = []


# 长度验证
def long_test(password, level):
    if len(password) <= 8:
        # print("您的密码不足8位！")
        lst.append("您的密码不足8位！")
    else:
        level += 1
        # print("longlevel",level)
    return level


# 字符验证
def symbol_test(password, level):
    result = [0, 0, 0, 0]
    for pw in password:
        if pw.isdigit():
            result[0] = 1
        elif pw.isupper():
            result[1] = 1
        elif pw.islower():
            result[2] = 1
        elif pw in string.punctuation:
            result[3] = 1
    if sum(result) >= 3:
        level += 1
        # print("slevel",level)
    else:
        # print("你的密码需要包括大、小写字母.数字.其它符号,以上四种至少三种")
        lst.append("你的密码需要包括大、小写字母.数字.其它符号,以上四种至少三种")
    # print("slevel",level)
    return level


# 判断子串重复
def substring_test(password, level):
    for i in range(len(password)):
        # 不比较最后三位
        if i + 3 <= len(password):
            st = password[i: i + 3]
            # print(st)
            # print(password.count(st))
            if password.count(st) >= 2:
                # print("您的密码子串有重复！")
                lst.append("您的密码子串有重复！")
                return level
    else:
        level += 1
        # print("sublevel",level)
    return level


password = input("请输入您的密码：")
level = 2
level = long_test(password, level)
level = symbol_test(password, level)
level = substring_test(password, level)
print("评分登记为", level, end="")
if level != 5:
    print(lst)
